/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.clase.demo.dao.impl;

import edu.upc.clase.demo.dao.SabioDao;
import edu.upc.clase.demo.entity.Sabio;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;

/**
 *
 * @author lcabrera
 */
public class SabioDaoImpl extends SimpleJdbcDaoSupport implements SabioDao {
  
    private static Logger log = LoggerFactory.getLogger(SabioDaoImpl.class);  
    
    @Autowired
    public SabioDaoImpl(DataSource dataSource) {
        log.info("Asignando el dataSource");
        setDataSource(dataSource);
    }

    @Override
    public Integer insertar(Sabio sabio) {

        getJdbcTemplate().update(
                "insert into planesdb.usuario (tipo_documento_id_documento,email,contrasena,nombres,ap_paterno,ap_materno,sexo,nu_documento,te_fijo,te_movil,direccion,fe_nacimiento, apelativo, autobiografia, pagina_url, banco, nu_cta_bancaria, tipo_usuario, in_estado) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
                sabio.getTipo_Documento(), sabio.getCorreo(), sabio.getPassword(), sabio.getNombre(), sabio.getAp_paterno(), sabio.getAp_materno(), sabio.getSexo(), sabio.getDocumento(), sabio.getTe_Fijo(), sabio.getTe_movil(), sabio.getDireccion(), sabio.getFe_nacimiento(), sabio.getApelativo(), sabio.getBiografia(), sabio.getWebSite(), sabio.getBanco(), sabio.getNroCuenta(), "S", "1");
        return getSimpleJdbcTemplate().queryForInt("call identity()");
    }

    @Override
    public void actualizar(Sabio sabio) {
        getJdbcTemplate().update(
                "update planesdb.usuario SET tipo_documento_id_documento = ?, email = ?, contrasena = ?, nombres = ?, ap_paterno = ?, ap_materno = ?, sexo = ?, nu_documento = ?, te_fijo = ?, te_movil = ?, direccion = ?, fe_nacimiento = ?, apelativo = ?, autobiografia = ?, pagina_url = ?, banco = ?, nu_cta_bancaria = ? WHERE id_usuario = ?",
                sabio.getTipo_Documento(), sabio.getCorreo(), sabio.getPassword(), sabio.getNombre(), sabio.getAp_paterno(), sabio.getAp_materno(), sabio.getSexo(), sabio.getDocumento(), sabio.getTe_Fijo(), sabio.getTe_movil(), sabio.getDireccion(), sabio.getFe_nacimiento(), sabio.getApelativo(), sabio.getBiografia(), sabio.getWebSite(), sabio.getBanco(), sabio.getNroCuenta(), sabio.getId());
    }

    @Override
    public void eliminar(Sabio sabio) {
        getJdbcTemplate().update(
                "delete from planesdb.usuario where id = ?", sabio.getId());
    }

    @Override
    public Sabio buscar(Integer id) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "SELECT usuario.id_usuario,usuario.tipo_documento_id_documento,usuario.email,usuario.contrasena,usuario.nombres,usuario.ap_paterno,usuario.ap_materno,usuario.sexo,usuario.nu_documento,usuario.te_fijo,usuario.te_movil,usuario.direccion,usuario.fe_nacimiento,usuario.apelativo,usuario.autobiografia,usuario.pagina_url,usuario.banco,usuario.nu_cta_bancaria,usuario.tipo_usuario,usuario.in_estado FROM planesdb.usuario where id_usuario=?",
                    new BeanPropertyRowMapper<Sabio>(Sabio.class), id);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public List<Sabio> buscarTodos() {
        return getSimpleJdbcTemplate().query(
                "SELECT usuario.id_usuario,usuario.tipo_documento_id_documento,usuario.email,usuario.contrasena,usuario.nombres,usuario.ap_paterno,usuario.ap_materno,usuario.sexo,usuario.nu_documento,usuario.te_fijo,usuario.te_movil,usuario.direccion,usuario.fe_nacimiento,usuario.apelativo,usuario.autobiografia,usuario.pagina_url,usuario.banco,usuario.nu_cta_bancaria,usuario.tipo_usuario,usuario.in_estado FROM planesdb.usuario",
                new BeanPropertyRowMapper<Sabio>(Sabio.class));
    }

    @Override
    public Sabio buscar(String correo) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "SELECT usuario.id_usuario,usuario.tipo_documento_id_documento,usuario.email,usuario.contrasena,usuario.nombres,usuario.ap_paterno,usuario.ap_materno,usuario.sexo,usuario.nu_documento,usuario.te_fijo,usuario.te_movil,usuario.direccion,usuario.fe_nacimiento,usuario.apelativo,usuario.autobiografia,usuario.pagina_url,usuario.banco,usuario.nu_cta_bancaria,usuario.tipo_usuario,usuario.in_estado FROM planesdb.usuario where email=?",
                    new BeanPropertyRowMapper<Sabio>(Sabio.class), correo);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    //@Override
    //public List<Sabio> buscarPorNombre(String nombre) {
    //    try {
    //        Map<String,String> parametros = new HashMap<String,String>();
    //        parametros.put("nombre","%"+nombre+"%");
    //        return getSimpleJdbcTemplate().query(
    //                "select * from sabios where nombre like :nombre",
    //                new BeanPropertyRowMapper<Sabio>(Sabio.class),parametros);
    //    } catch (EmptyResultDataAccessException e) {
    //        return null;
    //    }
    //}    
}
